package com.example.algorithm.huawei_rongyao_29;

import java.util.Scanner;
import java.util.Stack;

// 自己的一种错误的思路
// 萌生了自己的这种错误的思路之后。才意识到，正确的那个算法的设计有多精妙
public class Q01_LongestValidParentheses02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        scanner.close();
        System.out.println(longestValidParentheses(str));
    }

    public static int longestValidParentheses(String s) {
        Stack<Integer> stack = new Stack<>();
        int maxLength = 0;

        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(') {
                stack.push(i);
            } else {
                if (stack.isEmpty()) {
                    continue;
                }
                stack.pop();
                // 要保证stack.peek()不会报错，就必须要保证此时stack里面至少还有一个。此写法之所以不行，就是因为此写法保证不了。
                maxLength = Math.max(maxLength, i - stack.peek());
            }
        }
        return maxLength;
    }
}


